package com.hh.bss.util;

import java.util.Random;

public class RandomHelper {
	private static Random r = new Random();
	/**
	 * 产生一个随机整数
	 * @param max int : 随机的最大整数
	 * @return int : [0,max)
	 */
	public static int nextInt(int max){
		return r.nextInt(max);
	}
	/**
	 * 产生随机字符串
	 * @param length int : 随机字符串长度（大于零）
	 * @param seed String : 随机字符串种子，随机字符串内所有字符均来源于种子
	 * @return String : 随机字符串
	 */
	public static String createRandomString(int length, String seed){
		if(length <= 0 || StringHelper.isEmpty(seed)) return null;
		char[] c = new char[length];
		for (int i = 0; i < length; i++){
			int index = r.nextInt(seed.length());
			c[i] = seed.charAt(index);
		}
		return new String(c);
	}
	/**
	 * 产生随机字符串（种子为所有的数字及大小写字母）
	 * @param length int : 随机字符串长度（大于零）
	 * @return String : 随机字符串
	 */
	public static String createRandomString(int length){
		StringBuffer seed = new StringBuffer();
		seed.append(StringHelper.ALL_NUMERIC_LETTER);
		seed.append(StringHelper.ALL_LOWER_LETTER);
		seed.append(StringHelper.ALL_UPPER_LETTER);
		return createRandomString(length, seed.toString());
	}
	/**
	 * 随机取得指定整数数组的子集
	 * @param set int[] : 整数数组
	 * @param count int : 子集数目
	 * @return int[] : 相应的随机子集
	 */
	public static int[] getRandomSubset(final int[] set,final int count){		
		if(count > set.length) return set;
		int[] tmp = new int[set.length];
		for(int i = 0;i<set.length;i++) tmp[i] = set[i];
		//取随机
		for(int i=0;i<count;i++){
			int index = r.nextInt(set.length - i);
			//交换
			int temp = set[index];
			set[index] = set[set.length-i-1];
			set[set.length-i-1] = temp;
		}
		int[] ret = new int[count];
		for(int i = 0;i<count;i++) ret[i] = set[set.length - i -1];
		return ret;
	}
	/**
	 * 随机取得指定对象数组的子集
	 * @param set Object[] : 对象数组
	 * @param count int : 子集数目
	 * @return Object[] : 相应的随机子集
	 */	
	public static Object[] getRandomSubset(final Object[] set,final int count){
		if(count > set.length) return set;
		int[] tmp = new int[set.length];
		for(int i = 0;i<tmp.length;i++) tmp[i] = i;
		int[] ret = getRandomSubset(tmp,count);
		Object[] r = new Object[ret.length];
		for(int i =0;i<r.length;i++){
			r[i] = set[ret[i]];
		}
		return r;
	}
	public static void main(String[] args){
		String[] set=new String[20];
		for(int i = 0;i<set.length;i++) set[i] = String.valueOf(i);
		Object[] ret = RandomHelper.getRandomSubset(set,20);
		for(int i= 0;i<ret.length;i++) System.out.print(ret[i]+",");
	}
}
